home *** CD-ROM | disk | FTP | other *** search
/ Side Holy - Aoi Nanase Illust Collection / Holy Side.iso / Html / ImageFader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-06-18  |  4.8 KB  |  201 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.Graphics;
  6. import java.awt.Image;
  7. import java.awt.MediaTracker;
  8. import java.awt.image.ImageObserver;
  9. import java.awt.image.MemoryImageSource;
  10. import java.util.StringTokenizer;
  11. import java.util.Vector;
  12.  
  13. public class ImageFader extends Applet implements Runnable {
  14.    Image targetImage;
  15.    Vector images;
  16.    int[] targetPix;
  17.    Dimension targetSize;
  18.    Thread thread;
  19.    String message;
  20.    int bgColor = -16777216;
  21.    boolean zoomIn = false;
  22.    int speed = 1;
  23.    String imageDir = ".";
  24.  
  25.    public void init() {
  26.       this.images = new Vector();
  27.       String var1 = ((Applet)this).getParameter("imageDir");
  28.       if (var1 != null) {
  29.          this.imageDir = var1;
  30.       }
  31.  
  32.       var1 = ((Applet)this).getParameter("images");
  33.       StringTokenizer var2 = new StringTokenizer(var1, "|");
  34.  
  35.       for(int var3 = 0; var2.hasMoreTokens(); ++var3) {
  36.          Image var4 = ((Applet)this).getImage(((Applet)this).getDocumentBase(), this.imageDir + "/" + var2.nextToken().trim());
  37.          ImageLoader var5 = new ImageLoader(var4, new MediaTracker(this));
  38.          this.images.addElement(var5);
  39.       }
  40.  
  41.       var1 = ((Applet)this).getParameter("bgColor");
  42.       if (var1 != null) {
  43.          this.bgColor = Integer.parseInt(var1, 16);
  44.       }
  45.  
  46.       var1 = ((Applet)this).getParameter("zoom");
  47.       if (var1 != null && var1.trim().equals("in")) {
  48.          this.zoomIn = true;
  49.       }
  50.  
  51.       var1 = ((Applet)this).getParameter("speed");
  52.       if (var1 != null) {
  53.          this.speed = Integer.parseInt(var1);
  54.          if (this.speed <= 1) {
  55.             this.speed = 1;
  56.          } else if (this.speed > 10) {
  57.             this.speed = 10;
  58.          }
  59.       }
  60.  
  61.       this.targetSize = ((Component)this).size();
  62.       ((ImageLoader)this.images.elementAt(0)).start();
  63.       this.message = "Loading image...";
  64.    }
  65.  
  66.    public void start() {
  67.       if (this.thread == null) {
  68.          this.thread = new Thread(this);
  69.          this.thread.start();
  70.       }
  71.  
  72.    }
  73.  
  74.    public void stop() {
  75.       if (this.thread != null) {
  76.          this.thread.stop();
  77.          this.thread = null;
  78.       }
  79.  
  80.    }
  81.  
  82.    synchronized void draw(ImageLoader var1, int var2, ImageLoader var3, int var4, double var5) {
  83.       int[] var7 = var1.getPixels();
  84.       int var8 = var1.getWidth();
  85.       int var9 = var1.getHeight();
  86.       int[] var10 = var3.getPixels();
  87.       int var11 = var3.getWidth();
  88.       int var12 = var3.getHeight();
  89.  
  90.       for(int var15 = 0; var15 < this.targetSize.height; ++var15) {
  91.          for(int var16 = 0; var16 < this.targetSize.width; ++var16) {
  92.             int var17 = var8 / 2 + (var16 - this.targetSize.width / 2) * var8 * var2 / 200 / this.targetSize.width;
  93.             int var18 = var9 / 2 + (var15 - this.targetSize.height / 2) * var9 * var2 / 200 / this.targetSize.height;
  94.             int var13;
  95.             if (var17 >= 0 && var17 < var8 && var18 >= 0 && var18 < var9) {
  96.                var13 = var7[var17 + var18 * var8];
  97.             } else {
  98.                var13 = this.bgColor;
  99.             }
  100.  
  101.             var17 = var11 / 2 + (var16 - this.targetSize.width / 2) * var11 * var4 / 200 / this.targetSize.width;
  102.             var18 = var12 / 2 + (var15 - this.targetSize.height / 2) * var12 * var4 / 200 / this.targetSize.height;
  103.             int var14;
  104.             if (var17 >= 0 && var17 < var11 && var18 >= 0 && var18 < var12) {
  105.                var14 = var10[var17 + var18 * var11];
  106.             } else {
  107.                var14 = this.bgColor;
  108.             }
  109.  
  110.             int var19 = (var13 & 16711680) >> 16;
  111.             int var20 = (var13 & '\uff00') >> 8;
  112.             int var21 = var13 & 255;
  113.             int var22 = (var14 & 16711680) >> 16;
  114.             int var23 = (var14 & '\uff00') >> 8;
  115.             int var24 = var14 & 255;
  116.             int var25 = (int)((double)var19 * ((double)1.0F - var5) + (double)var22 * var5) << 16;
  117.             int var26 = (int)((double)var20 * ((double)1.0F - var5) + (double)var23 * var5) << 8;
  118.             int var27 = (int)((double)var21 * ((double)1.0F - var5) + (double)var24 * var5);
  119.             this.targetPix[var16 + var15 * this.targetSize.width] = -16777216 + var25 + var26 + var27;
  120.          }
  121.       }
  122.  
  123.       this.targetImage.flush();
  124.       ((Component)this).repaint();
  125.    }
  126.  
  127.    void draw(ImageLoader var1, int var2) {
  128.       this.draw(var1, var2, var1, var2, (double)1.0F);
  129.    }
  130.  
  131.    public synchronized void paint(Graphics var1) {
  132.       if (this.message != null) {
  133.          var1.setColor(Color.black);
  134.          var1.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  135.          var1.setColor(Color.cyan);
  136.          var1.drawString(this.message, 10, 20);
  137.       } else {
  138.          var1.drawImage(this.targetImage, 0, 0, (ImageObserver)null);
  139.       }
  140.    }
  141.  
  142.    public void update(Graphics var1) {
  143.       this.paint(var1);
  144.    }
  145.  
  146.    public void run() {
  147.       int var1 = 0;
  148.       int var2 = 100;
  149.       this.targetPix = new int[this.targetSize.width * this.targetSize.height];
  150.       this.targetImage = ((Component)this).createImage(new MemoryImageSource(this.targetSize.width, this.targetSize.height, this.targetPix, 0, this.targetSize.width));
  151.       ImageLoader var3 = (ImageLoader)this.images.elementAt(0);
  152.  
  153.       while(!var3.isLoaded()) {
  154.          if (var3.isError()) {
  155.             this.message = "Error: image loading...";
  156.             ((Component)this).repaint();
  157.             return;
  158.          }
  159.  
  160.          try {
  161.             Thread.sleep(100L);
  162.          } catch (InterruptedException var7) {
  163.             ((Throwable)var7).printStackTrace();
  164.          }
  165.       }
  166.  
  167.       this.message = null;
  168.  
  169.       while(true) {
  170.          if (var2 >= 300) {
  171.             var2 -= 200;
  172.             var1 = (var1 + 1) % this.images.size();
  173.          }
  174.  
  175.          var3 = (ImageLoader)this.images.elementAt(var1);
  176.          ImageLoader var4 = (ImageLoader)this.images.elementAt((var1 + 1) % this.images.size());
  177.          if (var4.isLoaded()) {
  178.             if (var2 >= 200) {
  179.                this.draw(var3, this.zoomIn ? 300 - var2 : var2, var4, this.zoomIn ? 500 - var2 : var2 - 200, (double)(var2 - 200) / (double)100.0F);
  180.             } else {
  181.                this.draw(var3, this.zoomIn ? 300 - var2 : var2);
  182.             }
  183.          } else {
  184.             if (!((Thread)var4).isAlive()) {
  185.                ((Thread)var4).start();
  186.             }
  187.  
  188.             this.draw(var3, this.zoomIn ? 300 - var2 : var2);
  189.          }
  190.  
  191.          try {
  192.             Thread.sleep(20L);
  193.          } catch (InterruptedException var6) {
  194.             ((Throwable)var6).printStackTrace();
  195.          }
  196.  
  197.          var2 += this.speed;
  198.       }
  199.    }
  200. }
  201.